package com.fisicaapp;

public class Energia {
	private double EnergiaTotal;
	private double vInicial, hInicial, velocidad, altura, masa;//, kResorte; // como magnitud
	private double Ep,Ek; //Energia potencial, cinetica - resorte esta pendiente
	public static final double g = 9.81;

	//CONSTRUCTORES
	public Energia(double altura, double masa){	;
		this.altura = altura;
		this.hInicial = altura;
		this.masa = masa;
		this.Ep = (masa*g*altura);
		this.Ek = 0;
		this.EnergiaTotal = this.Ep;
		
	}
	// valores por defecto
	
	
	
	//FIN CONSTRUCTORES
	
	/* METODOS DE ACCESO y ACCIONES */
	public double getEtotal(){ return EnergiaTotal; }
	public double getEpotencial(){ return Ep; }
	public double getEcinetica(){ return Ek; }
	public double getVinicial(){ return vInicial; }
	public double getVfinal(){ return Math.sqrt((2*this.EnergiaTotal)/this.masa);}
	public double getHinicial(){ return hInicial; }
	public double getMasa(){ return masa; }
	public double getVel(){ return velocidad; }
	public double getAlt(){ return altura; }
	
	public boolean setMasa(double masa){
		if (masa > 0){
			this.masa = masa;			
			this.Ep = masa * g * altura;
			this.Ek = masa * ((velocidad*velocidad)/2);
			this.EnergiaTotal = this.Ep + this.Ek;
			return true;
		}else
			return false;			
				
	}
	
	/*
	 *Cambiar vInicial y hInicial Actualiza la energia total ! 
	 */
	public boolean setVinicial(double vInicial){
		if (vInicial >= 0){
			this.vInicial = vInicial;
			this.velocidad = vInicial;
			this.Ek = this.masa * ((vInicial*vInicial)/2);
			this.EnergiaTotal = this.Ek + this.Ep;
			return true;
		}else
			return false;
	}
	
	public boolean setHinicial(double hInicial){
		if (hInicial >= 0){
			this.hInicial = hInicial;
			this.altura = hInicial;
			this.Ep = this.masa * g * hInicial;
			this.EnergiaTotal = this.Ek + this.Ep;
			return true;
		}else
			return false;
	}
	
	
	public double getAltMax(){
		if (this.masa > 0)		
			return (this.EnergiaTotal/(g*this.masa));
		else
			return -1; //Energia infinita !
		
	}
	public double getVelMax(){
		if (this.masa > 0)
			return (Math.sqrt(2*this.EnergiaTotal/this.masa));
		else
			return -1; //Energia infinita !
	}
	public double getTiempo(){
		return  (Math.sqrt(2*this.EnergiaTotal/this.masa))/9.81;
	}



	public void updateVelocidad(double velocidad){
		double ek = (this.masa/2)*(velocidad*velocidad);
	//	if (ek > this.EnergiaTotal){ //coherencia con conservacion de la energia - no actualiza
		//	return false;
	//	}
	//	else{
			if (ek == this.EnergiaTotal){
				this.Ep = 0;				
				this.altura = 0;
				this.EnergiaTotal = 0;
			}else{
				this.Ep = this.EnergiaTotal - ek;
				this.altura = this.Ep/(this.masa*g);

		//	}
			this.Ek = ek;
			this.velocidad = velocidad;

			

		}
 
	}
	public void updateAltura(double altura){
		double ep = this.masa * g * altura;
			if(ep <= 0){
				ep=0;
			}
			if (ep == this.EnergiaTotal){
				this.Ek = 0;
				this.velocidad = 0;
			}
			else{
				this.Ek = this.EnergiaTotal - ep;}
			this.Ep = ep;
			this.altura = altura;
		

		

	}



	public void setPerdidaEnergia(double altura) {
		this.EnergiaTotal = this.masa*g*altura;
		// TODO Auto-generated method stub
		
	}




}